//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
//     Copyright (c) Telligent Systems Corporation.  All rights reserved.
// </copyright> 
//------------------------------------------------------------------------------

using System;

using CommunityServer.Blogs.Components;
using CommunityServer.Components;
using CommunityServer.Controls;

namespace CommunityServer.Blogs.Controls
{
    /// <summary>
    /// Summary description for WeblogTemplatedForumWebControl.
    /// </summary>
    public abstract class WeblogTemplatedWebControl : WeblogBaseTemplatedWebControl
    {
        public WeblogTemplatedWebControl():base()
        {
			
        }

        /// <summary>
        /// By default, checks to see if a blog exists and if the user has read access
        /// </summary>
        /// <param name="w"></param>
        protected virtual void Authorize(Weblog w)
        {
            if(w == null)
                PermissionBase.RedirectOrExcpetion(CSExceptionType.SectionNotFound,string.Format("Weblog {0} could not be found",CSContext.Current.ApplicationKey));

            if(Context.Items[CurrentUser.Username + "Permission:" + Permission.View.ToString()] == null)
            {
                Permissions.AccessCheck(w,Permission.View,this.CurrentUser);
                Context.Items[CurrentUser.Username + "Permission:" + Permission.View.ToString()] = true;

            }
        }

        protected bool IsPublicBlog
        {
            get{ return Permissions.ValidatePermissions(CurrentWeblog,Permission.View,Users.GetAnonymousUser(true));}
        }

        private WeblogConfiguration weblogConfig = null;
        protected WeblogConfiguration WeblogConfig
        {
            get
            {
                if(weblogConfig == null)
                    weblogConfig = WeblogConfiguration.Instance();

                return weblogConfig;
            }
        }

        private Weblog weblog = null;

        /// <summary>
        /// Returns the CurrentWeb and calls Authorize
        /// </summary>
        public virtual Weblog CurrentWeblog
        {
            get
            {
                if(weblog == null)
                {
                    string appKey = CSContext.Current.ApplicationKey;
                    if(appKey == null)
                        appKey = WeblogConfig.DefautApplicationKey;

					weblog = Weblogs.GetWeblog(appKey,true);

                    if(!this.CurrentUser.IsBlogAdministrator)
						Authorize(weblog);
                }

                return weblog;
            }
        }


    }
}
